package com.erp.auto.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.erp.auto.domain.ErpAutoEvaluationCompany;
import com.erp.auto.domain.ErpAutoEvaluationConfig;
import com.erp.auto.domain.ErpAutoEvaluationConfigSingle;
import com.erp.auto.domain.ErpAutoEvaluationConfigTask;
import com.erp.auto.domain.dto.ErpAutoEvaluationConfigDto;
import com.erp.auto.domain.dto.ErpAutoEvaluationConfigResponseDto;
import com.erp.auto.mapper.ErpAutoEvaluationCompanyMapper;
import com.erp.auto.mapper.ErpAutoEvaluationConfigMapper;
import com.erp.auto.mapper.ErpAutoEvaluationConfigSingleMapper;
import com.erp.auto.mapper.ErpAutoEvaluationConfigTaskMapper;
import com.erp.auto.service.ErpAutoEvaluationConfigService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.bean.BeanCopyUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 自动测评配置表
 *
 * @author WXX
 * @date 2023-12-25 14:59:30
 */
@Service
public class ErpAutoEvaluationConfigServiceImpl implements ErpAutoEvaluationConfigService {

    @Resource
    ErpAutoEvaluationConfigMapper erpAutoEvaluationConfigMapper;
    @Resource
    ErpAutoEvaluationConfigTaskMapper erpAutoEvaluationConfigTaskMapper;
    @Resource
    ErpAutoEvaluationConfigSingleMapper erpAutoEvaluationConfigSingleMapper;
    @Resource
    ErpAutoEvaluationCompanyMapper erpAutoEvaluationCompanyMapper;
    @Override
    public List<ErpAutoEvaluationConfigResponseDto> getList() {
        // 获取整体规则
//        List<ErpAutoEvaluationConfig> configList
//                = erpAutoEvaluationConfigMapper.selectList(null);
//        List<Long> idList = configList.stream().map(e -> e.getId()).collect(Collectors.toList());
//        // 获取单个规则
//        List<ErpAutoEvaluationConfigTask> taskList
//                = erpAutoEvaluationConfigTaskMapper.selectList(
//                        new LambdaQueryWrapper<ErpAutoEvaluationConfigTask>()
//                        .in(ErpAutoEvaluationConfigTask::getConfigId, idList));
//        if (configList == null && taskList == null){
//            return null;
//        }
//        List<ErpAutoEvaluationConfigResponseDto> responseDtoList = new ArrayList<>();
//        ErpAutoEvaluationConfigResponseDto responseDto = null;
//        // 组合主规则数据
//        for (ErpAutoEvaluationConfig config : configList){
//            responseDto = new ErpAutoEvaluationConfigResponseDto();
//            BeanUtils.copyProperties(config, responseDto);
//            responseDto.setContent("1、单品出单达到" + config.getOrderQuantity()
//                    + "单后，第二天测评" + config.getAfterNumber() + "单本商品"
//                    + (config.getIsEvaluation().equals("1") ? "，且上一个订单不能是测评单；" : "")
//                    + "；2、当日不出单优先测评近" + config.getBeforeDay() + "天出的自然订单测评一单；");
//            responseDtoList.add(responseDto);
//        }
//        // 组合单规则数据
//        for (ErpAutoEvaluationConfigTask task : taskList){
//            responseDto = new ErpAutoEvaluationConfigResponseDto();
//            ErpAutoEvaluationConfig mainConfig = configList.stream()
//                    .filter(e -> e.getId().equals(task.getConfigId())).findAny().orElse(null);
//            BeanUtils.copyProperties(mainConfig, responseDto);
//            responseDto.setContent((mainConfig.getIsEvaluation().equals("1") ? "1、上一个订单不能是测评单；" : "")
//                    + "2、优先测评近" + mainConfig.getBeforeDay() + "天出的自然订单测评一单；");
//            responseDto.setPlanStartTime(task.getPlanStartTime());
//            responseDto.setPlanEvaluationNum(task.getPlanEvaluationNum());
//            responseDtoList.add(responseDto);
//        }
//
//        return responseDtoList;
        return null;
    }

    @Override
    public Object selectErpAutoEvaluationConfigById(Long id, String type) {
        if (type.equals("5")){
            return erpAutoEvaluationConfigMapper.selectById(id);
        }else if (type.equals("51")){
            return erpAutoEvaluationConfigSingleMapper.selectById(id);
        }else if (type.equals("52")){
            return erpAutoEvaluationConfigTaskMapper.selectById(id);
        }else {
            return null;
        }
//        ErpAutoEvaluationConfigDto dto = new ErpAutoEvaluationConfigDto();
//        ErpAutoEvaluationConfig config = erpAutoEvaluationConfigMapper.selectById(id);
//        BeanUtils.copyProperties(config, dto);
//        return dto;
    }


    @Override
    public boolean saveEvaluationConfig(ErpAutoEvaluationConfigDto evaluationConfigDto) {

        if (evaluationConfigDto.getId() == null) {
            evaluationConfigDto.setCreateTime(new Date());
            switch (evaluationConfigDto.getEvaluationType()){
                case "5":
                    ErpAutoEvaluationConfig config = erpAutoEvaluationConfigMapper.selectOne(new LambdaQueryWrapper<ErpAutoEvaluationConfig>()
                            .eq(ErpAutoEvaluationConfig::getStoreId, evaluationConfigDto.getStoreId()));
                    if (config != null){
                        throw new NullPointerException("不允许重复添加");
                    }
                    ErpAutoEvaluationConfig evaluationConfig = new ErpAutoEvaluationConfig();
                    BeanUtils.copyProperties(evaluationConfigDto, evaluationConfig);
                    return erpAutoEvaluationConfigMapper.insert(evaluationConfig) > 0;
                case "51":
                    ErpAutoEvaluationConfigSingle configSingle = erpAutoEvaluationConfigSingleMapper.selectOne(new LambdaQueryWrapper<ErpAutoEvaluationConfigSingle>()
                            .eq(ErpAutoEvaluationConfigSingle::getStoreId, evaluationConfigDto.getStoreId()));
                    if (configSingle != null){
                        throw new NullPointerException("不允许重复添加");
                    }
                    ErpAutoEvaluationConfigSingle evaluationConfigSingle = new ErpAutoEvaluationConfigSingle();
                    BeanUtils.copyProperties(evaluationConfigDto, evaluationConfigSingle);
                    return erpAutoEvaluationConfigSingleMapper.insert(evaluationConfigSingle) > 0;
                case "52":
                    ErpAutoEvaluationConfigTask evaluationConfigTask = new ErpAutoEvaluationConfigTask();
                    BeanUtils.copyProperties(evaluationConfigDto, evaluationConfigTask);
                    List<ErpAutoEvaluationConfigTask> taskList = evaluationConfigDto.getEvaluationConfigTaskList();
                    for (ErpAutoEvaluationConfigTask task : taskList){
                        evaluationConfigTask.setId(null);
                        evaluationConfigTask.setPlanStartTime(task.getPlanStartTime());
                        evaluationConfigTask.setPlanEvaluationNum(task.getPlanEvaluationNum());
                        erpAutoEvaluationConfigTaskMapper.insert(evaluationConfigTask);
                    }
                    return true;
                default:
                    return false;
            }
        }else {
            evaluationConfigDto.setUpdateTime(new Date());
            switch (evaluationConfigDto.getEvaluationType()){
                case "5":
                    ErpAutoEvaluationConfig evaluationConfig = new ErpAutoEvaluationConfig();
                    BeanUtils.copyProperties(evaluationConfigDto, evaluationConfig);
                    return erpAutoEvaluationConfigMapper.updateById(evaluationConfig) > 0;
                case "51":
                    ErpAutoEvaluationConfigSingle evaluationConfigSingle = new ErpAutoEvaluationConfigSingle();
                    BeanUtils.copyProperties(evaluationConfigDto, evaluationConfigSingle);
                    return erpAutoEvaluationConfigSingleMapper.updateById(evaluationConfigSingle) > 0;
                default:
                    return false;
            }
        }
    }

    @Override
    public int updateStatusById(Long id, String type) {
        if (type.equals("5")){
            ErpAutoEvaluationConfig evaluationConfig = erpAutoEvaluationConfigMapper.selectById(id);
            if (evaluationConfig.getStatus() == 0) {
                evaluationConfig.setStatus(1);
            }else {
                evaluationConfig.setStatus(0);
            }
            return erpAutoEvaluationConfigMapper.updateById(evaluationConfig);
        }else if (type.equals("51")){
            ErpAutoEvaluationConfigSingle evaluationConfigSingle = erpAutoEvaluationConfigSingleMapper.selectById(id);
            if (evaluationConfigSingle.getStatus() == 0) {
                evaluationConfigSingle.setStatus(1);
            }else {
                evaluationConfigSingle.setStatus(0);
            }
            return erpAutoEvaluationConfigSingleMapper.updateById(evaluationConfigSingle);
        }else if (type.equals("52")){
            ErpAutoEvaluationConfigTask evaluationConfigTask = erpAutoEvaluationConfigTaskMapper.selectById(id);
            if (evaluationConfigTask.getStatus() == 0) {
                evaluationConfigTask.setStatus(1);
            }else {
                evaluationConfigTask.setStatus(0);
            }
            return erpAutoEvaluationConfigTaskMapper.updateById(evaluationConfigTask);
        }else {
            return 0;
        }


    }

    @Override
    public List<ErpAutoEvaluationConfig> getListByConfig(ErpAutoEvaluationConfig erpAutoEvaluationConfig) {
        LambdaQueryWrapper<ErpAutoEvaluationConfig> queryWrapper = new LambdaQueryWrapper<>();

        queryWrapper.eq(erpAutoEvaluationConfig.getStatus() != null,ErpAutoEvaluationConfig::getStatus,erpAutoEvaluationConfig.getStatus());

        return erpAutoEvaluationConfigMapper.selectList(queryWrapper);
    }

    @Override
    public R<Object> addCompanyEvaluationShop(String storeUserName) {
        ErpAutoEvaluationCompany evaluationCompany = new ErpAutoEvaluationCompany();
        evaluationCompany.setStoreUserName(storeUserName);
        ErpAutoEvaluationCompany search = erpAutoEvaluationCompanyMapper.selectOne(new LambdaQueryWrapper<ErpAutoEvaluationCompany>()
                .eq(ErpAutoEvaluationCompany::getStoreUserName, storeUserName));
        if (search == null) {
            return R.fail("已存在店铺：" + storeUserName );
        }
        int insert = erpAutoEvaluationCompanyMapper.insert(evaluationCompany);
        return insert > 0? R.ok() : R.fail();
    }

    @Override
    public R<Object> deleteCompanyEvaluationShop(Long id) {
        int delete = erpAutoEvaluationCompanyMapper.deleteById(id);
        return delete > 0? R.ok() : R.fail();
    }
}
